import CheckAuth from "../../util/auth"
import request from "../../util/request"

// pages/shopcar/shopcar.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
        slideButtons:[{
            type:'warn',
            text:'删除'
        }],
        cartList:[]
    },

    slideButtonTap(e){
        console.log('delete',e.currentTarget.dataset.id)
        var id = e.currentTarget.dataset.id
        this.setData({
            cartList:this.data.cartList.filter(item=>item.id!==id)  // filter方法： 过滤数组 , (这里是过滤出id不等于传入的item.id的商品)
        })
        request({
            url:`/carts/${id}`,
            method:'delete' //删除方法
        })
    },

    handleTap(e){
      var item = e.currentTarget.dataset.item
      item.checked = !item.checked  //这里更新不了页面，所以把代码封装在下面的更新方法中
      this.handleUpdate(item)
      console.log(item)
    },
    
    // 点击 - 处理函数
    handleMinus(e){
      var item = e.currentTarget.dataset.item
      if (item.number===1) {
        return
      }
      item.number--
      this.handleUpdate(item)
    },

    // 点击 + 处理函数
    handleAdd(e){
      var item = e.currentTarget.dataset.item
      item.number++
      this.handleUpdate(item)
    },

    handleUpdate(item){  //更新页面
      this.setData({
        cartList:this.data.cartList.map(data=>{
          if (data.id===item.id) {  //此处的data不是this.data.cartList中的data，是代表着的cartList这个数组的item，因为与传入的item重名了，所以用data代表
            return item
          }
          return data
        })
      })
      request({  //把上面更新过后的数据存起来
        url:`/carts/${item.id}`,
        method:"put",
        data:{  //不能...item放进去，因为前面连表查询后(_expand)，表中已经包含了商品的信息，所以不能使用...item
          "username":item.username,
          "tel":item.tel,
          "goodId":item.goodId,
          "number":item.number,
          "checked":item.checked
        }
      })
    },

    // 全选框 处理函数
    handleAllChecked(e){
        console.log(e.detail.value)
        if (e.detail.value.length===0) {
            //未全选
            this.setData({
                cartList:this.data.cartList.map(item=>({ //需要加个小括号再加一个大括号(要不然就不是对象了)
                    ...item,
                    checked:false
                }))
            })
        }else{
            // 全选
            this.setData({
                cartList:this.data.cartList.map(item=>({
                    ...item,
                    checked:true
                }))
            })
        }
    },


    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {

    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     * CheckAuth方法放在这里，因为每一次点击该购物车页面都会刷新数据，重新进入
     */
    onShow() {
        CheckAuth(()=>{
            console.log('准备加入购物车')
            let {nickName} = wx.getStorageSync('token')
            let tel = wx.getStorageSync('tel')
            request({
                url:`/carts?_expand=good&username=${nickName}&tel=${tel}`  //_expand：包含父资源的对象。将表carts用户中的加购的商品的goodId与对应good的id对应的商品信息拼合起来。&username=${nickName}&tel=${tel} 后面的这个字段则是具体准确到哪一个用户
            }).then(res=>{
                console.log(res)
                this.setData({
                    cartList:res
                })
            })
        })
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})